package springboot_demo.itheima.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import springboot_demo.itheima.pojo.Category;
import springboot_demo.itheima.pojo.Result;
import springboot_demo.itheima.service.CategoryService;

import java.util.List;

/**
 * 功能：控制器层（处理HTTP请求）
 * 作者：Java课程项目组
 * 日期：2025年01月23日
 */
@RestController
@CrossOrigin//解决跨域问题
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    //新增文章分类接口
    @PostMapping
    //Validated参数校验
    public Result add(@RequestBody @Validated(Category.Add.class) Category category){
        categoryService.add(category);
        return Result.success();
    }

    //查询文章分类列表接口
    @GetMapping
    public Result<List<Category>> list(){
        List<Category> cs=categoryService.list();
        return Result.success(cs);
    }

    //获取文章分类详情
    @GetMapping("/detail")
    public Result<Category> detail(Integer id){
        Category c=categoryService.findById(id);
        return Result.success(c);
    }

    //更新文章分类
    @PutMapping
    public Result update(@RequestBody @Validated(Category.Update.class) Category category){
        //@RequestBody:想象一下，当你发送一个POST请求给服务器时，你可能会在请求中携带一些数据，比如创建新用户的详细信息。这些信息通常是以JSON格式存在于请求体（body）中的。@RequestBody就像是一个翻译官，它告诉Spring框架：“嘿，这里有来自客户端的数据，请帮我把它转换成Java对象。”这样，你就可以直接在你的方法参数里使用这个Java对象了，而不需要手动解析请求体。
        //@Validated:它们就像守门员一样，在数据进入系统之前检查这些规则是否被遵守。如果有人试图用不符合条件的数据来创建用户，Spring会自动拒绝这个请求，并返回一个错误消息给用户，告诉他们哪里出了问题。
        categoryService.update(category);
        return Result.success();
    }

    //删除文章分类
    @DeleteMapping
    public Result delete(Integer id){
        categoryService.delete(id);
        return Result.success();
    }
}
